/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ec.dmz.seguridad.ejb.servicio;

import ec.dmz.seguridad.ejb.comparator.EntityOpcionComparator;
import ec.dmz.seguridad.ejb.dao.OpcionDao;
import ec.dmz.seguridad.ejb.dto.EntityOpcion;
import ec.dmz.seguridad.ejb.model.Opcion;
import ec.dmz.seguridad.ejb.model.Perfil;
import ec.dmz.seguridad.ejb.model.UsuarioPerfil;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;

/**
 *
 * @author Estiwar
 */
@LocalBean
@Stateless
public class OpcionServicio {

    @EJB
    private OpcionDao opcionDao;

    public List<EntityOpcion> listarPorUsuarioPerfil(List<UsuarioPerfil> listaUsuarioPerfil) throws Exception {
        List<EntityOpcion> listaDatos = new ArrayList<EntityOpcion>();
        Long estadoUsuario = null;
        Long idUsuario = null;
        Integer padre = null;
        List<Perfil> listaPerfiles = new ArrayList<Perfil>();
        for (UsuarioPerfil u : listaUsuarioPerfil) {
            idUsuario = 0l;
            estadoUsuario = 0l;
            listaPerfiles.add(u.getPerCodigo());
        }
        List<Opcion> listaAcceso = opcionDao.listarPorPerfil(listaPerfiles);
        for (Opcion ac : listaAcceso) {
            if (ac.getOpcCodigopadre() != null) {
                padre = ac.getOpcCodigopadre().getOpcCodigo();
            }
            listaDatos.add(new EntityOpcion(ac.getOpcCodigo(), ac.getOpcNombre(), ac.getOpcRuta(), padre, estadoUsuario, idUsuario, ac.getOpcNivel(), ac.getOpcOrden()));
        }
        Set<EntityOpcion> listaNoRepetidos = new HashSet<EntityOpcion>(listaDatos);
        List<EntityOpcion> listaDatosRetorno = new ArrayList<EntityOpcion>(listaNoRepetidos);
        Collections.sort(listaDatosRetorno, new EntityOpcionComparator());
        return listaDatosRetorno;
    }

    public Opcion obtenerOpcion() {
        return opcionDao.obtenerOpcion();
    }
}
